package com.dadi.vine.core.redis;

import java.util.Collection;
import java.util.List;
import java.util.Map;

public interface JedisClient {

	/**
	 * 获取
	 * 
	 * @return Redis Get 命令用于获取指定 key 的值。如果 key 不存在，返回 nil 。如果key 储存的值不是字符串类型，返回一个错误
	 */
	String get(String key);

	/**
	 * 设置
	 * 
	 * @return Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值， SET 就覆写旧值，且无视类型。
	 */
	String set(String key, String value);

	/**
	 * Hashget
	 * 
	 * @return Redis Hget 命令用于返回哈希表中指定字段的值。
	 */
	String hget(String hkey, String key);

	/**
	 * Hashset
	 * 
	 * @return Redis Hset 命令用于为哈希表中的字段赋值 。 如果哈希表不存在，一个新的哈希表被创建并进行 HSET 操作。 如果字段已经存在于哈希表中，旧值将被覆盖。
	 */
	long hset(String hkey, String key, String value);

	/**
	 * incr
	 * 
	 * @return Redis Incr 命令将 key 中储存的数字值增一。 如果 key 不存在，那么 key 的值会先被初始化为 0 ，然后再执行 INCR 操作。 如果值包含错误的类型，或字符串类型的值不能表示为数字，那么返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内
	 */
	long incr(String key);

	/**
	 * expire
	 * 
	 * @return Redis Expire 命令用于设置 key 的过期时间。key 过期后将不再可用。
	 */
	long expire(String key, int second);

	/**
	 * ttl
	 * 
	 * @return Redis TTL 命令以秒为单位返回 key 的剩余过期时间。
	 */
	long ttl(String key);

	/**
	 * del
	 * 
	 * @return Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。
	 */
	long del(String key);

	/**
	 * hdel
	 * 
	 * @return Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段，不存在的字段将被忽略。
	 */
	long hdel(String hkey, String key);

	Collection<String> keys(String key);
	
    /**
     * 根据hkey查询flieds里面所有对象
     * @param hkey
     * @return
     */

	Map<String, String> hgetAll(String hkey);

	/**
	 * 根据hkey,key数组查询
	 * @param key
	 * @param fields
	 * @return
	 */
	public List<String> hmget(final String key, final String... fields);
}
